স্প্রিং সিকিউরিটি দিয়ে আপনি সহজেই OAuth 2.0 ভিত্তিক সাইন-ইন সিস্টেম ইন্টিগ্রেট করতে পারেন, যেমন Google, Facebook, এবং GitHub। এই সমস্ত প্ল্যাটফর্ম OAuth 2.0 প্রটোকল ব্যবহার করে, যা একটি নিরাপদ অথেন্টিকেশন পদ্ধতি প্রদান করে। স্প্রিং সিকিউরিটি OAuth2 Login এবং OAuth2 Client সুবিধা দিয়ে তৃতীয় পক্ষের লগইন ইন্টিগ্রেট করা সহজ করে দেয়।
OAuth 2.0 Authentication Workflow:
- ব্যবহারকারী লগইন করতে চান এমন একটি সেবা (Google, Facebook, GitHub) নির্বাচন করেন।
- স্প্রিং সিকিউরিটি সেই সেবার OAuth2 সার্ভারে পাঠায় ব্যবহারকারীর অনুমতি চেয়ে।
- ব্যবহারকারী অনুমতি দিলে, স্প্রিং সিকিউরিটি সাফল্যের সাথে access token সংগ্রহ করে।
- এরপর, স্প্রিং সিকিউরিটি ব্যবহারকারীকে অ্যাপ্লিকেশনটির ভিতরে নিয়ে আসে।
কনফিগারেশন স্টেপস
1. ডিপেন্ডেন্সি যোগ করা
Spring Boot অ্যাপ্লিকেশন থেকে Google, Facebook, অথবা GitHub OAuth 2.0 এ লগইন করতে হলে, প্রথমে spring-boot-starter-oauth2-client ডিপেন্ডেন্সি যোগ করতে হবে।
Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
Gradle:
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
2. Google OAuth Integration
Google Developer Console-এ অ্যাপ্লিকেশন সেটআপ:
- Google Developer Console এ যান।
- নতুন একটি প্রজেক্ট তৈরি করুন।
- "OAuth 2.0 Client IDs" তৈরি করুন এবং Authorized Redirect URIs-এ
http://localhost:8080/login/oauth2/code/googleURLটি যুক্ত করুন। - Client ID এবং Client Secret সংগ্রহ করুন।
আবশ্যক কনফিগারেশন:
application.yml বা application.properties ফাইলে Google এর OAuth 2.0 কনফিগারেশন যুক্ত করুন।
application.yml:
spring:
security:
oauth2:
client:
registration:
google:
client-id: <Your-Client-ID>
client-secret: <Your-Client-Secret>
scope:
- profile
- email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-name: Google
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
3. Facebook OAuth Integration
Facebook Developer Console-এ অ্যাপ্লিকেশন সেটআপ:
- Facebook Developer Console এ যান।
- নতুন একটি অ্যাপ্লিকেশন তৈরি করুন।
- "Facebook Login" সেটআপ করুন এবং Valid OAuth Redirect URIs এ
http://localhost:8080/login/oauth2/code/facebookURLটি যুক্ত করুন। - App ID এবং App Secret সংগ্রহ করুন।
কনফিগারেশন:
application.yml:
spring:
security:
oauth2:
client:
registration:
facebook:
client-id: <Your-Facebook-App-ID>
client-secret: <Your-Facebook-App-Secret>
scope:
- email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-name: Facebook
provider:
facebook:
authorization-uri: https://www.facebook.com/dialog/oauth
token-uri: https://graph.facebook.com/v9.0/oauth/access_token
user-info-uri: https://graph.facebook.com/v9.0/me?fields=id,name,email
4. GitHub OAuth Integration
GitHub Developer Console-এ অ্যাপ্লিকেশন সেটআপ:
- GitHub Developer Console এ যান।
- একটি নতুন OAuth অ্যাপ্লিকেশন তৈরি করুন।
- Authorization callback URL এ
http://localhost:8080/login/oauth2/code/githubURLটি যুক্ত করুন। - Client ID এবং Client Secret সংগ্রহ করুন।
কনফিগারেশন:
application.yml:
spring:
security:
oauth2:
client:
registration:
github:
client-id: <Your-GitHub-Client-ID>
client-secret: <Your-GitHub-Client-Secret>
scope:
- read:user
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-name: GitHub
provider:
github:
authorization-uri: https://github.com/login/oauth/authorize
token-uri: https://github.com/login/oauth/access_token
user-info-uri: https://api.github.com/user
5. কাস্টম কনফিগারেশন (Optional)
স্প্রিং সিকিউরিটি এর মাধ্যমে কাস্টম ইউজার ডিটেইলস সংগ্রহ করা এবং কাস্টম AuthenticationSuccessHandler বা AuthenticationFailureHandler ব্যবহার করা যায়।
Custom Authentication Success Handler:
@Component
public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
// Custom logic here (e.g. redirect or logging)
super.onAuthenticationSuccess(request, response, authentication);
}
}
Custom Authentication Failure Handler:
@Component
public class OAuth2AuthenticationFailureHandler implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request,
HttpServletResponse response,
AuthenticationException exception) throws IOException {
// Handle failure (e.g. logging or redirect to error page)
}
}
6. Security Configuration
Spring Security কনফিগারেশন ফাইলে OAuth 2.0 সাপোর্ট সক্ষম করতে হবে। নিচের কনফিগারেশনটি আপনার অ্যাপ্লিকেশনটি বিভিন্ন OAuth2 সাইন-ইন সিস্টেমের সাথে ইন্টিগ্রেট করতে সাহায্য করবে।
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll() // Public access
.anyRequest().authenticated() // Other requests require authentication
.and()
.oauth2Login() // Enable OAuth2 Login
.and()
.logout().permitAll();
}
}
7. Run and Test
স্প্রিং বুট অ্যাপ্লিকেশন চালু করুন। ব্রাউজারে গিয়ে /login URL-এ ক্লিক করলে, আপনি নির্বাচিত সোশ্যাল মিডিয়া (Google, Facebook, GitHub) এর মাধ্যমে লগইন করার অপশন দেখতে পাবেন।
উপসংহার
Spring Security-এর মাধ্যমে Google, Facebook, এবং GitHub-এর সাথে OAuth2 সাইন-ইন ইন্টিগ্রেশন অত্যন্ত সহজ এবং সুরক্ষিত। OAuth 2.0 প্রোটোকল ব্যবহার করে আপনি সহজে তৃতীয় পক্ষের অথেন্টিকেশন ব্যবস্থা আপনার অ্যাপ্লিকেশনে যোগ করতে পারবেন।
Read more